#include <Arduino.h>
#include "Logger.h"

#ifndef DEBUGPORT
  #define DEBUGPORT   Serial1
#endif

static bool isSerialBegin=false;

void LoggerHeader(char type,char* file,char *func,int line){
  if(!isSerialBegin){
      DEBUGPORT.begin(DBAND);
      isSerialBegin=true;
  }
  DEBUGPORT.print("[");
  DEBUGPORT.print(type);
  DEBUGPORT.print("][");
  DEBUGPORT.print(file);
  DEBUGPORT.print("][");
  DEBUGPORT.print(func);
  DEBUGPORT.print("][");
  DEBUGPORT.print(line,OCT);
  DEBUGPORT.print("][");
  DEBUGPORT.print(millis(),OCT);
  DEBUGPORT.print("]-->");
}

void Logger_B(const unsigned char* buffer,int length,char* file,char *func,int line)
{
    if(buffer!=NULL&&length>0){
        if(!isSerialBegin){
            DEBUGPORT.begin(DBAND);
            isSerialBegin=true;
        }
        LoggerHeader('B',file,func,line);
        DEBUGPORT.print("HEX=");
        for(int i=0;i<length;i++)
        {
          char buf[8]={0x0};
          sprintf(buf,"%02X ",buffer[i]);
          DEBUGPORT.print(buf);
          DEBUGPORT.flush();
        }
        DEBUGPORT.println("END!");
    }
}

void Logger(char type,char* file,char *func,int line,char* format,...)
{
    char buf[LOGGERBUFFER];
    va_list args;
    va_start(args,format);
    vsprintf((char *)buf, format, args);
    va_end(args);
    if(!isSerialBegin){
        DEBUGPORT.begin(DBAND);
        isSerialBegin=true;
    }
    LoggerHeader(type,file,func,line);
    DEBUGPORT.println(buf);
}

void Format(const char* format,...)
{
    char buf[LOGGERBUFFER];
    va_list args;
    va_start(args,format);
    vsprintf((char *)buf, format, args);
    va_end(args);
    if(!isSerialBegin){
        DEBUGPORT.begin(DBAND);
        isSerialBegin=true;
    }
    DEBUGPORT.println(buf);
    DEBUGPORT.flush();
}